<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var setZeroes = function (matrix) {
      const m = matrix.length, n = matrix[0].length;
      let flagCol0 = false, flagRow0 = false;//表示在一行和第一列有没有 0 
      for (let i = 0; i < m; i++) {//寻找第一列是否存在 0 
        if (matrix[i][0] === 0) {
          flagCol0 = true;
        }
      }
      for (let j = 0; j < n; j++) {
        if (matrix[0][j] === 0) {
          flagRow0 = true;
        }
      }//循环矩阵。如果遇见 0 ，将和这个网格相同的第一行和第一列的元素标记成 0 
      for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
          if (matrix[i][j] === 0) {
            matrix[i][0] = matrix[0][j] = 0;
          }
        }
      }//循环矩阵，如果当前网络对应的第一行和第一列是 0 ，则将这个单元搁置为 0 
      for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
          if (matrix[i][0] === 0 || matrix[0][j] === 0) {
            matrix[i][j] = 0;
          }
        }
      }//如果第一列有0，则将这第一列全部搁置为0
      if (flagCol0) {
        for (let i = 0; i < m; i++) {
          matrix[i][0] = 0;
        }
      }//如果第一行有0，则将这第一行全部搁置为0
      if (flagRow0) {
        for (let j = 0; j < n; j++) {
          matrix[0][j] = 0;
        }
      }
      return matrix
    };
    console.log(setZeroes([[1, 1, 1], [1, 0, 1], [1, 1, 1]]))
  </script>
</body>

</html>